package com.etone.smartAudit.service;

import com.alibaba.fastjson.JSON;
import com.etone.smartAudit.domain.TaskExec;
import com.etone.smartAudit.dto.FileDTO;
import com.etone.smartAudit.enums.CheckState;
import com.etone.smartAudit.mapper.TaskExecMapper;
import com.etone.smartAudit.vo.task.TaskExecVO;
import lombok.AllArgsConstructor;
import org.springframework.stereotype.Service;

import java.util.List;

/**
 * @author: sovy
 * @date: 2020/7/31
 * @description:
 */
@AllArgsConstructor
@Service
public class TaskExecService {
    private TaskExecMapper taskExecMapper;

    /**
     * 更新执行人
     *
     * @param taskExecs
     * @param taskId
     */
    public void add(List<TaskExec> taskExecs, Integer taskId) {
        //先删除旧数据
        taskExecMapper.deleteByTaskId(taskId);
        taskExecs.forEach(taskExec -> taskExec.setTaskId(taskId));
        taskExecMapper.batchInsert(taskExecs);
    }

    /**
     * 更新执行状态
     *
     * @param taskId  任务id
     * @param adminId 执行人id
     */
    public void updateOverState(Integer taskId, Integer adminId, CheckState state) {
        taskExecMapper.updateOverState(taskId, adminId, state);
    }

    /**
     * 开始执行任务
     *
     * @param taskId
     * @param adminId
     */
    public void taskExecStart(Integer taskId, Integer adminId) {
        taskExecMapper.taskExecStart(taskId, adminId);
    }

    /**
     * 完成任务
     *
     * @param taskId     任务id
     * @param adminId    执行人id
     * @param realDayCnt 实际工时
     * @param file       文件信息
     * @param extendInfo 扩展信息
     * @param checkState 状态
     */
    public void taskExecEnd(Integer taskId, Integer adminId, Double realDayCnt, FileDTO file, String extendInfo, CheckState checkState) {
        taskExecMapper.taskExecEnd(taskId, adminId, realDayCnt, file == null ? null : JSON.toJSONString(file), extendInfo, checkState);
    }

    /**
     * 执行驳回
     *
     * @param taskId
     */
    public void taskExecReject(Integer taskId) {
        taskExecMapper.taskExecReject(taskId);
    }

    /**
     * 检查任务是否执行完成
     *
     * @param taskId
     * @return
     */
    public boolean checkTaskExecOver(Integer taskId) {
        return taskExecMapper.checkTaskExecOver(taskId);
    }

    /**
     * 根据任务id查询执行人
     *
     * @param taskId
     * @return
     */
    public List<TaskExec> findByTaskId(Integer taskId) {
        return taskExecMapper.findByTaskId(taskId);
    }

    /**
     * 根据任务id删除执行人
     *
     * @param id
     */
    public void deleteByTaskId(Integer id) {
        taskExecMapper.deleteByTaskId(id);
    }

    /**
     * 查询任务执行记录
     *
     * @param taskId
     * @return
     */
    public List<TaskExecVO> list(Integer taskId) {
        return taskExecMapper.findList(taskId);
    }
}
